目录题目题解三种解法“单调队列”解法新增、获取最大值删除代码题目给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例1:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动窗口的位置最大值--------------------------------[13-1]-3536731[3-1-3]5367313[-1-35]367513-1[-353]67513-1-3[536]7613-1-35[367]7示例2:输
目录题目题解三种解法“单调队列”解法新增、获取最大值删除代码题目给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例1:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动窗口的位置最大值--------------------------------[13-1]-3536731[3-1-3]5367313[-1-35]367513-1[-353]67513-1-3[536]7613-1-35[367]7示例2:输
21.合并两个有序链表(MergeTwoSortedLists)将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]提示:两个链表的节点数目范围是[0,50]-100l1和l2均按非递减顺序排列方法1:递归思路与算法我们可以如下递归地定义两个链表里的merge操作(忽略边界情况,比如空链表等):也就是说,两个链表头部值较小的一个节点与剩下元素的merge操作结果合并。我们直
21.合并两个有序链表(MergeTwoSortedLists)将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]提示:两个链表的节点数目范围是[0,50]-100l1和l2均按非递减顺序排列方法1:递归思路与算法我们可以如下递归地定义两个链表里的merge操作(忽略边界情况,比如空链表等):也就是说,两个链表头部值较小的一个节点与剩下元素的merge操作结果合并。我们直
一、题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/two-sum二、解法:classSolution{public:vectortwoSum(vector&nums,intt
题干给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。要求空间复杂度O(1)流程分析这个题需要使用快慢指针,即可转换为追赶问题。追赶问题就会存在等式:快的速度=k慢的速度我们假设快指针是满指针速度的两倍,则有:快路程/t=2慢路程/t,即:快路程=慢路程2(1)下面我们
题目链接:leetcode-29-两数相除此题需要在不使用乘法,除法,取模的情况下求的两数相除的结果,开始看到这道题,以为使用位运算做的,结果发现位运算里面太多的循环,导致并不能通过测试.首先要知道除法的定义,除法的定义其实非常简单,比如:10/3=x=>3x=10=>x+x+x=10所以我们只需要循环执行+除数操作,直到和大于或者小于被除数时,就可以得到当前的商。当然使用减法也是可以的。这就是暴力求解的做法但是单纯的循环执行+除数操作非常耗时,所以需要对步长进行调整,每一次相加如果小于被除数,那么就将步长加一,如果大于被除数了就调整步长为0再次重复上述操作,直到相加结果大于被除数,并且步长为
一、题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/two-sum二、解法:classSolution{public:vectortwoSum(vector&nums,intt
题干给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。要求空间复杂度O(1)流程分析这个题需要使用快慢指针,即可转换为追赶问题。追赶问题就会存在等式:快的速度=k慢的速度我们假设快指针是满指针速度的两倍,则有:快路程/t=2慢路程/t,即:快路程=慢路程2(1)下面我们
题目链接:leetcode-29-两数相除此题需要在不使用乘法,除法,取模的情况下求的两数相除的结果,开始看到这道题,以为使用位运算做的,结果发现位运算里面太多的循环,导致并不能通过测试.首先要知道除法的定义,除法的定义其实非常简单,比如:10/3=x=>3x=10=>x+x+x=10所以我们只需要循环执行+除数操作,直到和大于或者小于被除数时,就可以得到当前的商。当然使用减法也是可以的。这就是暴力求解的做法但是单纯的循环执行+除数操作非常耗时,所以需要对步长进行调整,每一次相加如果小于被除数,那么就将步长加一,如果大于被除数了就调整步长为0再次重复上述操作,直到相加结果大于被除数,并且步长为